const fs=require("fs")
const path=require("path")

// 表格
const Table=require("cli-table")

class Utils{
    constructor(){
        // process.cwd() 是当前执行node命令时候的文件夹地址
        this.folderPath=path.join(process.cwd(),"src");  //demo\utils\src
        // 定义
        this.table=null
    }
    
    getFile(){
        // 读取文件夹
        let fileList=fs.readdirSync(this.folderPath)
        //console.log(fileList);  //[ '1.txt', '2.js' ]
        fileList.forEach(item=>{
            // 拼接
            let filePath=path.join(this.folderPath,item)
            // 获取信息
            let fileData=fs.statSync(filePath)
            // push 每一个文件的信息
            this.table.push([
                item,
                fileData.size,
                fileData.ctime.toLocaleString(),
                fileData.mtime.toLocaleString()
            ])
        })
    }

    // 查看
    createTable(){
        // 实例Table
        this.table=new Table({
            head:["文件名称","文件大小","文件创建时间","最后修改时间"], //表头
            colWidths:[30,30,30,30]   //列 宽度
        })
        // 调用
        this.getFile()

        console.log(this.table.toString());
    }

    // 增加
    add(fileName,fileContent){
        fs.writeFileSync(path.join(this.folderPath,fileName),fileContent)
    }

    getFileList(){
        // 读取文件夹
        let fileList=fs.readdirSync(this.folderPath)
        return fileList
    }

    // 删除
    del(fileName){
        if(fs.existsSync(path.join(this.folderPath,fileName))){
            fs.unlinkSync(path.join(this.folderPath,fileName))
        }else{
            console.log("此文件不存在");
        }
    }

    // 编辑
    edit(fileName,newfileName){
        let fileNames=path.join(this.folderPath,fileName)
        let newfileNames=path.join(this.folderPath,newfileName)
        fs.renameSync(fileNames,newfileNames)
    }
}

// 抛出所有的方法  实例化
exports.utils=new Utils()